Spring ORM এবং REST API Integration

Java Technologies - স্প্রিং ওআরএম (Spring ORM)
85
85

Spring ORM এবং REST API Integration এমন একটি প্রযুক্তিগত সমাধান, যা Spring Framework ব্যবহার করে ডাটাবেস সংক্রান্ত কার্যাবলী এবং HTTP প্রোটোকলের মাধ্যমে ক্লায়েন্টের সঙ্গে যোগাযোগের জন্য ব্যবহৃত হয়। এই সমাধানটি Spring ORM এর শক্তিশালী ডাটাবেস ব্যবস্থাপনা ক্ষমতাকে RESTful API এর মাধ্যমে এক্সপোজ করে, যাতে ক্লায়েন্ট বা ফ্রন্টএন্ড অ্যাপ্লিকেশন ডেটার সঙ্গে সহজে ইন্টারঅ্যাক্ট করতে পারে।


Spring ORM এবং REST API Integration এর সুবিধা

  1. ডাটাবেস ম্যানেজমেন্ট: Spring ORM Hibernate, JPA, ইত্যাদি ব্যবহার করে ডাটাবেস অপারেশনগুলি কার্যকরভাবে ম্যানেজ করতে পারে।
  2. RESTful API: REST (Representational State Transfer) ক্লায়েন্ট-সার্ভার আর্কিটেকচারের উপর ভিত্তি করে একটি স্টাইল যা HTTP মেথড (GET, POST, PUT, DELETE) ব্যবহার করে ডেটা এক্সচেঞ্জ করতে সাহায্য করে।
  3. ডিস্ট্রিবিউটেড সিস্টেম: REST API এর মাধ্যমে বিভিন্ন সিস্টেম বা অ্যাপ্লিকেশন সহজেই একে অপরের সঙ্গে যোগাযোগ করতে পারে, যেমন মোবাইল অ্যাপ্লিকেশন বা ফ্রন্টএন্ড ইন্টারফেস।

Spring ORM এর সাথে REST API Integration এর উদাহরণ

ধরা যাক, আমাদের একটি Product মডেল এবং একটি ProductRepository তৈরি করতে হবে, যার মাধ্যমে Spring ORM ডাটাবেস থেকে ডেটা রিট্রিভ এবং ম্যানেজ করবে। এর পর, REST API তৈরি করে ডেটা ক্লায়েন্টের কাছে এক্সপোজ করা হবে।


১. ডিপেন্ডেন্সি কনফিগারেশন

pom.xml ফাইলে প্রয়োজনীয় ডিপেন্ডেন্সি যোগ করুন:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

২. Entity তৈরি করা

Product নামক একটি Entity তৈরি করুন, যা id, name, এবং price ফিল্ডের সাথে একটি ডাটাবেস টেবিলের ম্যাপিং করবে।

@Entity
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private double price;

    // Getters and Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}

৩. Repository তৈরি করা

Spring Data JPA ব্যবহার করে ProductRepository তৈরি করুন, যা ডাটাবেসে CRUD (Create, Read, Update, Delete) অপারেশন করবে।

package com.example.demo.repository;

import com.example.demo.entity.Product;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {
}

৪. Service Layer তৈরি করা

Service Layer তৈরি করুন যা ডাটাবেস থেকে ডেটা পরিচালনা করবে এবং REST API এর মাধ্যমে এক্সপোজ করবে।

package com.example.demo.service;

import com.example.demo.entity.Product;
import com.example.demo.repository.ProductRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class ProductService {

    @Autowired
    private ProductRepository productRepository;

    public List<Product> getAllProducts() {
        return productRepository.findAll();
    }

    public Product getProductById(Long id) {
        return productRepository.findById(id).orElse(null);
    }

    public Product createProduct(Product product) {
        return productRepository.save(product);
    }

    public Product updateProduct(Long id, Product product) {
        if (productRepository.existsById(id)) {
            product.setId(id);
            return productRepository.save(product);
        }
        return null;
    }

    public void deleteProduct(Long id) {
        productRepository.deleteById(id);
    }
}

৫. Controller তৈরি করা

REST API তৈরি করতে একটি Controller তৈরি করুন, যা HTTP মেথড (GET, POST, PUT, DELETE) ব্যবহার করে Service Layer এর মেথডগুলো কল করবে।

package com.example.demo.controller;

import com.example.demo.entity.Product;
import com.example.demo.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/products")
public class ProductController {

    @Autowired
    private ProductService productService;

    @GetMapping
    public List<Product> getAllProducts() {
        return productService.getAllProducts();
    }

    @GetMapping("/{id}")
    public Product getProductById(@PathVariable Long id) {
        return productService.getProductById(id);
    }

    @PostMapping
    public Product createProduct(@RequestBody Product product) {
        return productService.createProduct(product);
    }

    @PutMapping("/{id}")
    public Product updateProduct(@PathVariable Long id, @RequestBody Product product) {
        return productService.updateProduct(id, product);
    }

    @DeleteMapping("/{id}")
    public void deleteProduct(@PathVariable Long id) {
        productService.deleteProduct(id);
    }
}

৬. Application Class

Spring Boot অ্যাপ্লিকেশন চালাতে @SpringBootApplication অ্যানোটেশনসহ একটি Main ক্লাস তৈরি করুন।

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

৭. Application Properties

application.properties ফাইলে ডাটাবেস কনফিগারেশন দিন (এখানে H2 ডাটাবেস ব্যবহার করা হয়েছে):

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.hibernate.ddl-auto=update
spring.h2.console.enabled=true

৮. API টেস্ট করা

  1. GET API: URL: http://localhost:8080/api/products এটি সমস্ত প্রোডাক্ট ফিরিয়ে দেবে।
  2. GET API (By ID): URL: http://localhost:8080/api/products/{id} এটি নির্দিষ্ট Product কে ফিরিয়ে দেবে।
  3. POST API: URL: http://localhost:8080/api/products Body (JSON):

    {
        "name": "Laptop",
        "price": 1000.00
    }
    
  4. PUT API: URL: http://localhost:8080/api/products/{id} Body (JSON):

    {
        "name": "Gaming Laptop",
        "price": 1200.00
    }
    
  5. DELETE API: URL: http://localhost:8080/api/products/{id}

সারাংশ

Spring ORM এবং REST API Integration ডাটাবেস অপারেশন এবং HTTP সার্ভিস এক্সপোজ করার জন্য শক্তিশালী একটি সমাধান। Spring ORM ডাটাবেস সম্পর্কিত কার্যাবলী পরিচালনা করে, এবং REST API সেই ডেটা ক্লায়েন্টের কাছে সহজে পৌঁছানোর উপায় দেয়। এই সমাধানটি মডেল-ভিউ-কন্ট্রোলার (MVC) আর্কিটেকচার ব্যবহার করে, যাতে ফ্রন্টএন্ড এবং ব্যাকএন্ডের মধ্যে মসৃণ যোগাযোগ নিশ্চিত হয়।

Content added By

Spring Data JPA এর মাধ্যমে REST API তৈরি

45
45

Spring Data JPA হল Spring Framework-এর একটি অত্যন্ত শক্তিশালী মডিউল, যা JPA (Java Persistence API) ব্যবহার করে ডেটাবেস অপারেশন সহজ করে। Spring Data JPA, Spring Boot-এর সঙ্গে মিলে দ্রুত এবং কার্যকরভাবে RESTful API তৈরি করতে সাহায্য করে।

এখানে আমরা একটি সাধারণ Spring Data JPA অ্যাপ্লিকেশন তৈরি করব এবং একটি REST API তৈরি করব, যা ডেটাবেস থেকে তথ্য এনে ক্লায়েন্টকে রেসপন্স করবে।


Spring Data JPA ব্যবহার করে REST API তৈরি করার জন্য পদক্ষেপ

১. Spring Boot প্রজেক্ট তৈরি করা

Spring Boot প্রজেক্ট তৈরি করতে, Spring Initializr ব্যবহার করুন (https://start.spring.io/)। এখানে কিছু প্রাথমিক ডিপেন্ডেন্সি নির্বাচন করতে হবে:

  • Spring Web: REST API তৈরি করার জন্য
  • Spring Data JPA: ডেটাবেসের সঙ্গে সংযোগ স্থাপনের জন্য
  • H2 Database (বা অন্য কোনো ডাটাবেস): ডেটাবেস ব্যবহার করার জন্য (এখানে H2 ব্যবহার করা হবে)
  • Spring Boot DevTools: ডেভেলপমেন্টের জন্য সহজ ডিবাগিং

২. Maven ডিপেন্ডেন্সি যোগ করা

Spring Boot প্রজেক্টে ডিপেন্ডেন্সি যোগ করা যেটি আপনার pom.xml ফাইলে থাকবে।

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>

৩. ডাটাবেস কনফিগারেশন

application.properties ফাইলে ডাটাবেস কনফিগারেশন সেট করতে হবে। এখানে H2 ডাটাবেসের কনফিগারেশন দেওয়া হলো:

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true

এটি H2 ডাটাবেসে কাজ করবে এবং অ্যাপ্লিকেশন রান করার সময় ডাটাবেসের কনসোল দেখতে পারবেন।


৪. Entity ক্লাস তৈরি করা

JPA Entity ক্লাস তৈরি করতে হবে, যা ডাটাবেস টেবিলের সঙ্গে সম্পর্ক স্থাপন করবে। উদাহরণস্বরূপ, একটি Product Entity তৈরি করা:

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private Double price;

    // Getters and Setters
}

এখানে @Entity অ্যানোটেশন ডেটাবেস টেবিলের জন্য Entity ক্লাসকে নির্দেশ করে এবং @Id হল Primary Key।


৫. Repository Interface তৈরি করা

Spring Data JPA এর সাহায্যে ডেটাবেস অপারেশন সহজ করতে JpaRepository ইন্টারফেস ব্যবহার করা হয়। এটি CRUD (Create, Read, Update, Delete) অপারেশনগুলো অ্যাক্সেস করতে সাহায্য করবে।

import org.springframework.data.jpa.repository.JpaRepository;

public interface ProductRepository extends JpaRepository<Product, Long> {
    // Custom query methods (if any) can be added here
}

এটি Product Entity এর জন্য ডেটাবেস অপারেশন সমর্থন করবে।


৬. Service Layer তৈরি করা

REST API-এর business logic সম্পাদন করতে একটি Service Layer তৈরি করা হয়। এখানে ProductService ক্লাসটি তৈরি করা হবে, যা ডেটাবেস থেকে তথ্য নিয়ে আসবে।

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class ProductService {

    @Autowired
    private ProductRepository productRepository;

    public List<Product> getAllProducts() {
        return productRepository.findAll();
    }

    public Product getProductById(Long id) {
        return productRepository.findById(id).orElse(null);
    }

    public Product createProduct(Product product) {
        return productRepository.save(product);
    }

    public Product updateProduct(Long id, Product product) {
        product.setId(id);
        return productRepository.save(product);
    }

    public void deleteProduct(Long id) {
        productRepository.deleteById(id);
    }
}

৭. Controller Layer তৈরি করা

RESTful API তৈরি করার জন্য Controller তৈরি করা হয়, যা HTTP রিকোয়েস্ট গ্রহণ করে এবং সঠিক সাড়া পাঠায়।

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/products")
public class ProductController {

    @Autowired
    private ProductService productService;

    @GetMapping
    public List<Product> getAllProducts() {
        return productService.getAllProducts();
    }

    @GetMapping("/{id}")
    public Product getProductById(@PathVariable Long id) {
        return productService.getProductById(id);
    }

    @PostMapping
    public Product createProduct(@RequestBody Product product) {
        return productService.createProduct(product);
    }

    @PutMapping("/{id}")
    public Product updateProduct(@PathVariable Long id, @RequestBody Product product) {
        return productService.updateProduct(id, product);
    }

    @DeleteMapping("/{id}")
    public void deleteProduct(@PathVariable Long id) {
        productService.deleteProduct(id);
    }
}

এখানে @RestController অ্যানোটেশনটি API Controller-কে নির্দেশ করে এবং HTTP মেথডের মতো @GetMapping, @PostMapping, @PutMapping, @DeleteMapping ব্যবহার করা হয় রিকোয়েস্ট গুলোকে ম্যানেজ করতে।


৮. অ্যাপ্লিকেশন চালানো

Spring Boot অ্যাপ্লিকেশন চালানোর জন্য, @SpringBootApplication অ্যানোটেশন ব্যবহার করা হয়:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

এটি Spring Boot অ্যাপ্লিকেশন চালু করবে এবং আপনি API রিকোয়েস্ট পাঠাতে পারবেন।


উপসংহার

এখন, আপনি Spring Data JPA ব্যবহার করে একটি পূর্ণ REST API তৈরি করতে সক্ষম হয়েছেন, যেখানে:

  • Product Entity ডেটাবেস টেবিলের সঙ্গে সম্পর্কিত।
  • ProductRepository Spring Data JPA এর সাহায্যে CRUD অপারেশন পরিচালনা করে।
  • ProductService business logic সম্পাদন করে।
  • ProductController API endpoints পরিচালনা করে।

এই REST API অন্যান্য ক্লায়েন্ট (যেমন Angular, React বা Postman) দ্বারা ব্যবহার করা যেতে পারে ডেটা পেতে বা ডেটা পাঠাতে।

Content added By

CRUD অপারেশন এবং Pagination RESTful API তে বাস্তবায়ন

57
57

Spring ORM ব্যবহার করে Java প্রযুক্তিতে ডেটাবেস অপারেশন (CRUD) এবং Pagination বা পেজিনেশন বাস্তবায়ন করা খুবই সহজ। Spring Data JPA এ CrudRepository বা JpaRepository ব্যবহার করে CRUD অপারেশন এবং ডেটা সঠিকভাবে পেজিনেট করা যায়। RESTful API তে CRUD এবং Pagination সহ কার্যক্রম তৈরি করা হয় যাতে ক্লায়েন্ট সহজে ডেটা অ্যাক্সেস এবং পরিচালনা করতে পারে।


CRUD অপারেশন

CRUD অপারেশন (Create, Read, Update, Delete) মূলত ডেটাবেসে ডেটা সংরক্ষণ, আপডেট, রিট্রিভ এবং মুছে ফেলার কাজ করে। Spring Data JPA এর মাধ্যমে এগুলির বাস্তবায়ন খুবই সরল এবং স্বয়ংক্রিয়। নিচে এর বিস্তারিত ব্যাখ্যা দেওয়া হলো।

1. Create (সৃষ্টি)

এটি ডেটাবেসে নতুন রেকর্ড তৈরি করতে ব্যবহৃত হয়।

উদাহরণ: Create অপারেশন

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/products")
public class ProductController {

    @Autowired
    private ProductService productService;

    @PostMapping
    public Product createProduct(@RequestBody Product product) {
        return productService.createProduct(product);
    }
}

Service Layer (Create Logic)

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class ProductService {

    @Autowired
    private ProductRepository productRepository;

    public Product createProduct(Product product) {
        return productRepository.save(product);  // Save to DB
    }
}

2. Read (পড়ুন)

এটি ডেটাবেস থেকে ডেটা রিট্রিভ করার জন্য ব্যবহৃত হয়।

উদাহরণ: Read অপারেশন

@GetMapping("/{id}")
public Product getProduct(@PathVariable Long id) {
    return productService.getProductById(id);
}

Service Layer (Read Logic)

public Product getProductById(Long id) {
    return productRepository.findById(id).orElseThrow(() -> new RuntimeException("Product not found"));
}

3. Update (আপডেট)

এটি ডেটাবেসে বিদ্যমান রেকর্ড আপডেট করার জন্য ব্যবহৃত হয়।

উদাহরণ: Update অপারেশন

@PutMapping("/{id}")
public Product updateProduct(@PathVariable Long id, @RequestBody Product updatedProduct) {
    return productService.updateProduct(id, updatedProduct);
}

Service Layer (Update Logic)

public Product updateProduct(Long id, Product updatedProduct) {
    Product existingProduct = productRepository.findById(id).orElseThrow(() -> new RuntimeException("Product not found"));
    existingProduct.setName(updatedProduct.getName());
    existingProduct.setPrice(updatedProduct.getPrice());
    return productRepository.save(existingProduct);
}

4. Delete (মুছে ফেলুন)

এটি ডেটাবেস থেকে রেকর্ড মুছে ফেলার জন্য ব্যবহৃত হয়।

উদাহরণ: Delete অপারেশন

@DeleteMapping("/{id}")
public void deleteProduct(@PathVariable Long id) {
    productService.deleteProduct(id);
}

Service Layer (Delete Logic)

public void deleteProduct(Long id) {
    productRepository.deleteById(id);
}

Pagination (পেজিনেশন)

Pagination RESTful API-তে ডেটা বড় পরিসরে প্রক্রিয়াকরণ এবং প্রদর্শন করতে ব্যবহৃত হয়। Spring Data JPA সহজেই pagination সাপোর্ট করে। এটি Pageable এবং Page অবজেক্ট ব্যবহার করে কার্যকরীভাবে ডেটা পেজিনেট করতে সক্ষম।

উদাহরণ: Pagination (Pageable) ব্যবহারে Read অপারেশন

@GetMapping
public Page<Product> getAllProducts(@RequestParam(defaultValue = "0") int page,
                                    @RequestParam(defaultValue = "10") int size) {
    return productService.getProductsWithPagination(page, size);
}

Service Layer (Pagination Logic)

import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

@Service
public class ProductService {

    @Autowired
    private ProductRepository productRepository;

    public Page<Product> getProductsWithPagination(int page, int size) {
        Pageable pageable = PageRequest.of(page, size);
        return productRepository.findAll(pageable);
    }
}

Repository Layer

Pageable সমর্থনকারী রেপোজিটরি মেথড ব্যবহার করা হয়:

import org.springframework.data.jpa.repository.JpaRepository;

public interface ProductRepository extends JpaRepository<Product, Long> {
    // JpaRepository already supports pagination
}

Pagination Response Format

Pagination-এর মাধ্যমে ডেটা রিটার্ন করার পর, সাধারণত এটি একটি Page অবজেক্টে রিটার্ন হয়, যা পরবর্তী পেজের জন্য প্রয়োজনীয় তথ্য (যেমন total pages, total elements) প্রদান করে।

{
  "content": [
    {
      "id": 1,
      "name": "Product 1",
      "price": 100
    },
    {
      "id": 2,
      "name": "Product 2",
      "price": 150
    }
  ],
  "totalElements": 20,
  "totalPages": 2,
  "size": 10,
  "number": 0
}

Spring ORM এ CRUD এবং Pagination এর সুবিধা

ফিচারCRUD অপারেশনPagination
ডেটা পরিচালনানতুন ডেটা তৈরি, পড়া, আপডেট এবং মুছে ফেলার জন্য ব্যবহৃত।বড় পরিসরের ডেটা ভাগ করে দেখানো, পেজিনেটেড আউটপুট।
প্রসেসিং স্পিডদ্রুত, ছোট পরিসরের ডেটা পরিচালনার জন্য উপযুক্ত।বড় পরিসরের ডেটা ব্যবস্থাপনা এবং ব্রাউজিং সুবিধা।
পারফরম্যান্সছোট ডেটাবেসের জন্য উপযুক্ত।বড় ডেটাবেসের ক্ষেত্রে পারফরম্যান্স উন্নত হয়।

Spring ORM ব্যবহার করে CRUD অপারেশন এবং Pagination বাস্তবায়ন খুবই সহজ, যেখানে ডেটাবেস পরিচালনা ও পেজিনেটেড ডেটার রিটার্ন করা যায়। Spring Data JPA দিয়ে এই কাজগুলো অত্যন্ত সহজ, এবং RESTful API তে সেগুলি কার্যকরভাবে কাজে লাগানো সম্ভব।

Content added By

উদাহরণ সহ ORM এবং REST API Integration

93
93

Spring ORM এবং REST API Integration হল একটি সাধারণ কৌশল যেখানে Spring ORM (Object-Relational Mapping) ব্যবহার করে ডাটাবেস অপারেশন এবং REST API-এর মাধ্যমে ক্লায়েন্ট-সার্ভারের যোগাযোগ সম্পন্ন করা হয়। এই পদ্ধতি ব্যবহার করে, Spring Framework ডাটাবেসের ডেটা RESTful Web Service API এর মাধ্যমে ক্লায়েন্টের কাছে পৌঁছাতে সাহায্য করে।

Spring ORM ব্যবহার করে Entity MappingCRUD Operations সম্পাদন করা হয়, এবং Spring Web (Spring MVC) ব্যবহার করে সেই ডেটা REST API-এর মাধ্যমে ক্লায়েন্টের কাছে পাঠানো হয়।


Spring ORM এবং REST API Integration এর মূল উদ্দেশ্য

  • ডাটাবেস অপারেশন: Spring ORM ব্যবহার করে ডাটাবেসের CRUD (Create, Read, Update, Delete) অপারেশন সম্পন্ন করা।
  • REST API তৈরি করা: Spring Web (Spring MVC) এর সাহায্যে RESTful Web Service তৈরি করা, যাতে ক্লায়েন্ট API-র মাধ্যমে ডাটাবেসে সঞ্চিত ডেটা অ্যাক্সেস করতে পারে।
  • JSON Format: REST API JSON ফরম্যাটে ডেটা প্রদান করবে, যা ক্লায়েন্টের জন্য সহজে ব্যবহারযোগ্য।

Spring ORM এবং REST API Integration এর উদাহরণ

1. Entity Class তৈরি করা (Spring ORM)

এখানে আমরা একটি Product Entity তৈরি করবো, যা ডাটাবেস টেবিলের প্রতিনিধিত্ব করবে। এই Entity ক্লাসে ORM ম্যাপিং কনফিগারেশন দেওয়া হয়েছে।

import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;

@Entity
public class Product {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private double price;

    // Getter এবং Setter
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}

এখানে, @Entity অ্যানোটেশন ব্যবহার করে Product ক্লাসকে ডাটাবেস টেবিলের সাথে ম্যাপ করা হয়েছে, এবং @Id এবং @GeneratedValue ব্যবহার করে প্রাইমারি কী সঠিকভাবে কনফিগার করা হয়েছে।


2. Repository Interface তৈরি করা (Spring Data JPA)

Spring Data JPA ব্যবহার করে Product Entity-এর জন্য একটি Repository তৈরি করা হবে, যা ডাটাবেস অপারেশন পরিচালনা করবে। এই Repository ক্লাসটি JpaRepository এক্সটেন্ড করে ডিফল্ট CRUD অপারেশনগুলো কার্যকর করবে।

import org.springframework.data.jpa.repository.JpaRepository;

public interface ProductRepository extends JpaRepository<Product, Long> {
    // custom query methods can be added here
}

এখানে JpaRepository<Product, Long> ব্যবহার করা হয়েছে, যা Product Entity-র জন্য CRUD অপারেশন অটোমেটিকভাবে প্রদান করে।


3. Service Layer তৈরি করা

ProductService ক্লাসটি ProductRepository কে ইনজেক্ট করে ডাটাবেসের CRUD অপারেশনগুলো পরিচালনা করবে।

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
public class ProductService {

    @Autowired
    private ProductRepository productRepository;

    public List<Product> getAllProducts() {
        return productRepository.findAll();
    }

    public Optional<Product> getProductById(Long id) {
        return productRepository.findById(id);
    }

    public Product createProduct(Product product) {
        return productRepository.save(product);
    }

    public Product updateProduct(Long id, Product product) {
        if (productRepository.existsById(id)) {
            product.setId(id);
            return productRepository.save(product);
        } else {
            return null;
        }
    }

    public void deleteProduct(Long id) {
        productRepository.deleteById(id);
    }
}

এখানে ProductService ক্লাসের মাধ্যমে ডাটাবেসের CRUD অপারেশনগুলো পরিচালনা করা হয়েছে, যেমন: getAllProducts(), getProductById(), createProduct(), updateProduct(), এবং deleteProduct()


4. Controller Layer তৈরি করা (REST API)

ProductController ক্লাসটি REST API তৈরি করবে, যা ProductService ক্লাসের মেথডগুলোকে HTTP রিকোয়েস্টের মাধ্যমে এক্সপোজ করবে।

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Optional;

@RestController
@RequestMapping("/api/products")
public class ProductController {

    @Autowired
    private ProductService productService;

    // Get all products
    @GetMapping
    public List<Product> getAllProducts() {
        return productService.getAllProducts();
    }

    // Get product by id
    @GetMapping("/{id}")
    public ResponseEntity<Product> getProductById(@PathVariable Long id) {
        Optional<Product> product = productService.getProductById(id);
        return product.map(ResponseEntity::ok)
                      .orElseGet(() -> ResponseEntity.status(HttpStatus.NOT_FOUND).build());
    }

    // Create a new product
    @PostMapping
    public ResponseEntity<Product> createProduct(@RequestBody Product product) {
        Product createdProduct = productService.createProduct(product);
        return ResponseEntity.status(HttpStatus.CREATED).body(createdProduct);
    }

    // Update an existing product
    @PutMapping("/{id}")
    public ResponseEntity<Product> updateProduct(@PathVariable Long id, @RequestBody Product product) {
        Product updatedProduct = productService.updateProduct(id, product);
        return updatedProduct != null ? ResponseEntity.ok(updatedProduct)
                                      : ResponseEntity.status(HttpStatus.NOT_FOUND).build();
    }

    // Delete a product
    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteProduct(@PathVariable Long id) {
        productService.deleteProduct(id);
        return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
    }
}

এখানে, ProductController ক্লাসে বিভিন্ন HTTP মেথড (GET, POST, PUT, DELETE) ব্যবহার করে CRUD অপারেশন REST API হিসেবে তৈরি করা হয়েছে।

  • GET /api/products: সকল পণ্য দেখাবে।
  • GET /api/products/{id}: নির্দিষ্ট পণ্য দেখাবে।
  • POST /api/products: নতুন পণ্য তৈরি করবে।
  • PUT /api/products/{id}: পণ্য আপডেট করবে।
  • DELETE /api/products/{id}: পণ্য মুছে ফেলবে।

Testing the API

API পরীক্ষা করার জন্য, Postman বা যেকোনো HTTP ক্লায়েন্ট টুল ব্যবহার করতে পারেন।

Example Request:

  1. Get all products:
    • Method: GET
    • URL: http://localhost:8080/api/products
  2. Create a product:
    • Method: POST
    • URL: http://localhost:8080/api/products
    • Body:

      {
        "name": "Smartphone",
        "price": 20000
      }
      

সার্বিক উপসংহার

Spring ORM এবং REST API Integration-এর মাধ্যমে আপনি ডাটাবেস অপারেশন এবং RESTful Web Services-এর সাহায্যে ডেটা ক্লায়েন্টের কাছে পৌঁছাতে পারেন। Spring ORM (Hibernate) ব্যবহার করে ডাটাবেসের CRUD অপারেশনগুলো বাস্তবায়ন করা হয়, এবং Spring MVC ব্যবহার করে সেই ডেটা RESTful API-এর মাধ্যমে ক্লায়েন্টের কাছে এক্সপোজ করা হয়। এই ধরনের Integration সিস্টেমের স্থিতিশীলতা এবং স্কেলেবিলিটি বৃদ্ধি করতে সাহায্য করে।


Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion